#include "sales_data.h"

Sales_data::Sales_data(std::istream &is)
{
    read(is, *this);  // read函数的作用是从 is中读取一条交易记录然后存入 this对象中
}

Sales_data& Sales_data::combine(const Sales_data &rhs)
{
    units_sold += rhs.units_sold;  // 累加书籍的销售量
    revenue += rhs.revenue;
    return *this;
}

Sales_data add(const Sales_data &lhs, const Sales_data &rhs)
{
    Sales_data sum = lhs;  // 把 lhs的数据成员拷贝给 sum
    sum.combine(rhs);  // 把 rhs的数据成员加到 sum中
    return sum;
}

// 输入的交易信息包括 ISBN、售出总数和售出价格
std::istream &read(std::istream &is, Sales_data &item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = price * item.units_sold;
    return is;
}

std::ostream &print(std::ostream &os, const Sales_data &item)
{
    os << item.isbn() << " " << item.units_sold << " "
       << item.revenue << " " << item.avg_price();
    return os;
}

void test_debug()
{
    constexpr Debug io_sub(false, true, false);  // 调试 IO
    if (io_sub.any()) {
        cerr << "print appropriate error message" << endl;
    }
    constexpr Debug prod(false);  // 无调试
    if (prod.any()) {  // 等价于 if(false)
        cerr << "print an error message" << endl;
    }
}
